package com.shrct.businessprocess.customerservice;

import com.shrct.businessprocess.customerservice.IHasServiceRecords;
import com.shrct.businessprocess.customerservice.RCFaultLevel;
import com.shrct.businessprocess.customerservice.RCFaultReportEvent;
import com.shrct.businessprocess.customerservice.RCFaultReportEventType;
import com.shrct.businessprocess.customerservice.RCFaultReportFlow;
import com.shrct.businessprocess.customerservice.RCFaultReportProduct;
import com.shrct.businessprocess.customerservice.RCFaultReportRMAInfo;
import com.shrct.businessprocess.customerservice.RCFaultStatus;
import com.shrct.businessprocess.customerservice.RCFaultWorkItem;
import com.shrct.businessprocess.customerservice.RCServiceRecord;
import com.shrct.businessprocess.customerservice.RCTimeLevel;
import com.shrct.businessprocess.customerservice.impl.RCFaultReportImpl;
import com.shrct.businessprocess.customerservice.proxy.RCFaultReportProxy;
import com.shrct.businessprocess.organization.RCEmployee;
import com.shrct.businessprocess.organization.RCEnterprise;
import com.shrct.businessprocess.product.RCIdentifiablePhysicalProductEntry;
import edu.fudan.mylang.pf.EntityImplementation;
import edu.fudan.mylang.pf.IModelObject;
import java.util.Collection;
import java.util.Date;
import org.eclipse.xtext.xbase.lib.Procedures.Procedure1;

@EntityImplementation(implementBy = RCFaultReportImpl.class)
public interface RCFaultReport extends IModelObject, IHasServiceRecords {
  public abstract String getSid();
  
  public abstract RCFaultReport setSid(final String sid);
  
  public abstract Date getReportDate();
  
  public abstract RCFaultReport setReportDate(final Date reportDate);
  
  public abstract Date getReportTime();
  
  public abstract RCFaultReport setReportTime(final Date reportTime);
  
  public abstract Date getFinishDate();
  
  public abstract RCFaultReport setFinishDate(final Date finishDate);
  
  public abstract Date getFinishTime();
  
  public abstract RCFaultReport setFinishTime(final Date finishTime);
  
  public abstract RCFaultLevel getFaultLevel();
  
  public abstract RCFaultReport setFaultLevel(final RCFaultLevel faultLevel);
  
  public abstract RCTimeLevel getTimeLevel();
  
  public abstract RCFaultReport setTimeLevel(final RCTimeLevel timeLevel);
  
  public abstract RCFaultStatus getStatus();
  
  public abstract RCFaultReport setStatus(final RCFaultStatus status);
  
  public abstract String getComment();
  
  public abstract RCFaultReport setComment(final String comment);
  
  public abstract RCEnterprise getCustomer();
  
  public abstract RCFaultReport setCustomer(final RCEnterprise customer);
  
  public abstract String getReporter();
  
  public abstract RCFaultReport setReporter(final String reporter);
  
  public abstract String getReporterPhone();
  
  public abstract RCFaultReport setReporterPhone(final String reporterPhone);
  
  public abstract String getReporterMail();
  
  public abstract RCFaultReport setReporterMail(final String reporterMail);
  
  public abstract String getReportLocation();
  
  public abstract RCFaultReport setReportLocation(final String reportLocation);
  
  public abstract RCEmployee getSeniorEngineer();
  
  public abstract RCFaultReport setSeniorEngineer(final RCEmployee seniorEngineer);
  
  public abstract RCEmployee getTechSupport();
  
  public abstract RCFaultReport setTechSupport(final RCEmployee techSupport);
  
  public abstract Boolean getMarked();
  
  public abstract RCFaultReport setMarked(final Boolean marked);
  
  public abstract Collection<RCFaultReportEvent> getEvents();
  
  public abstract RCFaultReportEvent createAndAddtoEvents();
  
  public abstract RCFaultReportEvent createAndAddtoEvents(final Procedure1<RCFaultReportEvent> updater);
  
  public abstract RCFaultReport removeFromEvents(final RCFaultReportEvent rCFaultReportEvent);
  
  public abstract RCFaultReport removeAllEvents();
  
  public abstract Collection<RCFaultWorkItem> getWorkItem();
  
  public abstract RCFaultWorkItem createAndAddtoWorkItem();
  
  public abstract RCFaultWorkItem createAndAddtoWorkItem(final Procedure1<RCFaultWorkItem> updater);
  
  public abstract RCFaultReport removeFromWorkItem(final RCFaultWorkItem rCFaultWorkItem);
  
  public abstract RCFaultReport removeAllWorkItem();
  
  public abstract Collection<RCFaultReportProduct> getProducts();
  
  public abstract RCFaultReportProduct createAndAddtoProducts();
  
  public abstract RCFaultReportProduct createAndAddtoProducts(final Procedure1<RCFaultReportProduct> updater);
  
  public abstract RCFaultReport removeFromProducts(final RCFaultReportProduct rCFaultReportProduct);
  
  public abstract RCFaultReport removeAllProducts();
  
  public abstract Collection<RCEmployee> getRelatedEmployees();
  
  public abstract RCFaultReport addtoRelatedEmployees(final RCEmployee rCEmployee);
  
  public abstract RCFaultReport setRelatedEmployees(final Iterable<RCEmployee> relatedEmployees);
  
  public abstract RCFaultReport removeFromRelatedEmployees(final RCEmployee rCEmployee);
  
  public abstract RCFaultReport removeAllRelatedEmployees();
  
  public abstract Collection<RCServiceRecord> getServiceRecords();
  
  public abstract RCFaultReport addtoServiceRecords(final RCServiceRecord rCServiceRecord);
  
  public abstract RCFaultReport setServiceRecords(final Iterable<RCServiceRecord> serviceRecords);
  
  public abstract RCFaultReport removeFromServiceRecords(final RCServiceRecord rCServiceRecord);
  
  public abstract RCFaultReport removeAllServiceRecords();
  
  public abstract String getCustomerComment();
  
  public abstract RCFaultReport setCustomerComment(final String customerComment);
  
  public abstract Integer getCustomerEval();
  
  public abstract RCFaultReport setCustomerEval(final Integer customerEval);
  
  public abstract Boolean allWorkItemFinished();
  
  public abstract Collection<RCFaultReportRMAInfo> getRMAs();
  
  public abstract void mark();
  
  public abstract void unmark();
  
  public abstract RCFaultReportProduct registerFaultProduct(final RCIdentifiablePhysicalProductEntry product);
  
  public abstract void removeFaultProduct(final RCFaultReportProduct faultProduct);
  
  public abstract void updateCurrentLevel();
  
  public abstract RCFaultReportEvent createEvent(final String comment, final RCFaultReportEventType type);
  
  public abstract void doAddtoServiceRecords(final RCServiceRecord serviceRecord);
  
  public abstract RCFaultReportEvent createEvent(final String comment, final RCFaultReportEventType type, final Date time);
  
  public abstract RCFaultReportEvent createSystemEvent(final String comment, final RCFaultReportEventType type);
  
  public abstract void deleteEvent(final RCFaultReportEvent event);
  
  public abstract void notifyEmployee(final RCEmployee employee, final String role);
  
  public abstract void doNotifyRelatedEmployees();
  
  public abstract void doNotifyEmployee(final RCEmployee employee, final String role);
  
  public abstract RCFaultReportFlow getFlow();
  
  public abstract void start(final String comment);
  
  public abstract void processReport(final Date time, final String comment);
  
  public abstract void _delete();
  
  public abstract void requireRMA(final String comment);
  
  public abstract void repairPerformed(final String comment);
  
  public abstract void pend(final String comment);
  
  public abstract void upgrade2Level(final RCTimeLevel level);
  
  public abstract void rMAPerformed(final String comment);
  
  public abstract void startDeviceRMA(final RCFaultReportProduct device, final String comment);
  
  public abstract void finishDeviceRMA(final RCFaultReportProduct device, final String comment);
  
  public abstract void resume(final String comment);
  
  public abstract void appendInfo(final String comment);
  
  public abstract void assign(final Procedure1<? super RCFaultWorkItem> preInit, final String comment, final Procedure1<? super RCFaultWorkItem> postProcess);
  
  public abstract void engineerReport(final RCFaultWorkItem workItem, final String comment);
  
  public abstract Boolean isReported();
  
  public abstract Boolean isProcessed();
  
  public abstract Boolean isWaiting4rma();
  
  public abstract Boolean isFinished();
  
  public abstract Boolean isPending();
  
  public abstract RCFaultReportProxy toProxy();
}
